﻿/*
Funcion para insertar una escuela y asociarla a una o varias sedes.
*/
CREATE OR REPLACE FUNCTION mantenimientos.insertarEscuelas(nEscuela VARCHAR, ids VARCHAR, largo INT) returns void as $$
DECLARE
       arrayIds text[];
       i INTEGER;
       idEscuela INTEGER;
       id INTEGER;
BEGIN
	SELECT regexp_split_to_array(ids, E'\\s+') INTO arrayIds;
	INSERT INTO mantenimientos.escuela (nombreescuela) VALUES (nEscuela);
	SELECT currval('mantenimientos.seq_escuela_id') INTO idEscuela;
	i:=1;
	while i<=largo LOOP
	SELECT CAST(arrayIds[i] AS INT) INTO id;
	INSERT INTO mantenimientos.rel_sede_escuela(idsede, idescuela) VALUES(id,idEscuela);
	i=i+1;
	END LOOP;
END;
$$ LANGUAGE PLPGSQL ;

/*
Funcion para asociar una escuela que ya esta registrada a una o varias sedes.
*/
CREATE OR REPLACE FUNCTION mantenimientos.insertarEscuelasConSede(varIdEscuela INT, nEscuela VARCHAR, ids VARCHAR, largo INT) returns void as $$
DECLARE
       arrayIds text[];
       i INTEGER;
       id INTEGER;
BEGIN
	UPDATE mantenimientos.escuela set nombreescuela=nEscuela where idEscuela=varIdEscuela;
	SELECT regexp_split_to_array(ids, E'\\s+') INTO arrayIds;
	i:=1;
	while i<=largo LOOP
	SELECT CAST(arrayIds[i] AS INT) INTO id;
	INSERT INTO mantenimientos.rel_sede_escuela(idsede, idescuela) VALUES(id,varIdEscuela);
	i=i+1;
	END LOOP;
END;
$$ LANGUAGE PLPGSQL ;


/*
Funcion para asociar una carrera a una o varias sedes.
*/
CREATE OR REPLACE FUNCTION mantenimientos.insertarCarrerasASede(idCarrera INT, ids VARCHAR, largo INT) returns void as $$
DECLARE
       arrayIds text[];
       i INTEGER;
       id INTEGER;
BEGIN
	SELECT regexp_split_to_array(ids, E'\\s+') INTO arrayIds;
	i:=1;
	while i<=largo LOOP
	SELECT CAST(arrayIds[i] AS INT) INTO id;
	INSERT INTO mantenimientos.rel_sede_carrera(idcarrera, idsede) VALUES(idCarrera,id);
	i=i+1;
	END LOOP;
END;
$$ LANGUAGE PLPGSQL ;

/*
Funcion para registrar una persona, asociarlo a docente, enlazarlo con una escuela,y con una sede.
*/
CREATE OR REPLACE FUNCTION mantenimientos.registroUsuario(cedula VARCHAR, nombre VARCHAR, primerApellido VARCHAR, segundoApellido VARCHAR, fechaNacimiento date, 
				gradoAcademico VARCHAR, sexo char, idSedes VARCHAR, idEscuela INT, nombreUsuario VARCHAR, claveUsuario VARCHAR, largo INT, tipoUsuario char) returns void as $$
DECLARE
       arrayIds text[];
       i INTEGER;
       id INTEGER;
       idPersona INTEGER;
BEGIN
	INSERT INTO general.personas(cedula,nombre, apellido1, apellido2, titulo, nacionalidad, fechanacimiento, sexo, tipo) 
		VALUES(cedula, nombre, primerApellido, segundoApellido, gradoAcademico, 1, fechaNacimiento,sexo,'F');
	SELECT currval('general.seq_personas_id') INTO idPersona;
	INSERT INTO mantenimientos.docente(idpersona,numplaza,porcentajeplaza, estado) 
		VALUES(idPersona,NULL,NULL,'1');
	INSERT INTO mantenimientos.rel_escuela_docente(idescuela,iddocente)VALUES(idEscuela,idPersona);
	SELECT regexp_split_to_array(idSedes, E'\\s+') into arrayIds;
	i:=1;
	while i<=largo LOOP
	SELECT CAST(arrayIds[i] AS INT) INTO id;
	INSERT INTO mantenimientos.rel_sede_docente(idpersona, idsede) VALUES(idPersona,id);
	i=i+1;
	END LOOP;
	INSERT INTO general.usuarios(idpersona,usuario,clave,tipo,estado) VALUES(idPersona,nombreUsuario,claveUsuario,tipoUsuario,'A');
END;
$$ LANGUAGE PLPGSQL ;

/*
Funcion para registrar insertar una labor y asociarla con la sede
*/

CREATE OR REPLACE FUNCTION mantenimientos.registroLabores (nombreLab VARCHAR, fechaIni DATE, fechaF DATE, cargaH INT, tipoL CHAR, varIdCoordinador INT) returns void as $$
DECLARE
      idLabor INTEGER;
      varIdSede INTEGER;
BEGIN
SELECT idsede FROM mantenimientos.coordinador where idpersona=varIdCoordinador and fechafin is null INTO varIdSede;

INSERT into mantenimientos.labor (nombrelabor, fechainicio, fechafin, carga, tipolabor) 
values (nombreLab,fechaIni,fechaF,cargaH,tipoL);

SELECT currval('mantenimientos.seq_labor_id') INTO idLabor;

INSERT INTO mantenimientos.rel_labor_sede(idlabor,idsede) 
	VALUES(idLabor, varIdSede);

END;
$$ LANGUAGE PLPGSQL ;
